#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}
/*
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 1. 初始化内存池
    HashBucket::initMemoryPool();

    qDebug() << "=== 第一阶段：大量分配内存 ===";
    
    // 给池0分配300个8字节内存
    std::vector<void*> pool0_ptrs;
    for (int i = 0; i < 300; i++) {
        void* ptr = HashBucket::useMemory(8);
        pool0_ptrs.push_back(ptr);
    }
    
    // 给池1分配150个16字节内存
    std::vector<void*> pool1_ptrs;
    for (int i = 0; i < 150; i++) {
        void* ptr = HashBucket::useMemory(16);
        pool1_ptrs.push_back(ptr);
    }
    
    // 给池3分配100个32字节内存
    std::vector<void*> pool3_ptrs;
    for (int i = 0; i < 100; i++) {
        void* ptr = HashBucket::useMemory(32);
        pool3_ptrs.push_back(ptr);
    }

    qDebug() << "大量分配后：";
    PoolVisualizer::debugAllPoolsStatus();

    qDebug() << "\n=== 第二阶段：释放部分内存，创建空闲链表 ===";
    
    // 释放池0的前100个内存
    for (int i = 0; i < 100; i++) {
        HashBucket::freeMemory(pool0_ptrs[i], 8);
    }
    
    // 释放池1的前50个内存
    for (int i = 0; i < 50; i++) {
        HashBucket::freeMemory(pool1_ptrs[i], 16);
    }
    
    // 释放池3的前30个内存
    for (int i = 0; i < 30; i++) {
        HashBucket::freeMemory(pool3_ptrs[i], 32);
    }

    qDebug() << "部分释放后：";
    PoolVisualizer::debugAllPoolsStatus();

    qDebug() << "\n=== 第三阶段：重新分配，测试空闲链表复用 ===";
    
    // 重新分配一些内存，应该从空闲链表获取
    std::vector<void*> new_pool0_ptrs;
    for (int i = 0; i < 80; i++) {
        void* ptr = HashBucket::useMemory(8);  // 应该从池0的空闲链表获取
        new_pool0_ptrs.push_back(ptr);
    }
    
    std::vector<void*> new_pool1_ptrs;
    for (int i = 0; i < 40; i++) {
        void* ptr = HashBucket::useMemory(16); // 应该从池1的空闲链表获取
        new_pool1_ptrs.push_back(ptr);
    }
    
    std::vector<void*> new_pool3_ptrs;
    for (int i = 0; i < 25; i++) {
        void* ptr = HashBucket::useMemory(32); // 应该从池3的空闲链表获取
        new_pool3_ptrs.push_back(ptr);
    }

    qDebug() << "重新分配后：";
    PoolVisualizer::debugAllPoolsStatus();

    qDebug() << "\n=== 第四阶段：再次释放，测试混合状态 ===";
    
    // 释放一些新分配的内存
    for (int i = 0; i < 30; i++) {
        HashBucket::freeMemory(new_pool0_ptrs[i], 8);
    }
    
    for (int i = 0; i < 15; i++) {
        HashBucket::freeMemory(new_pool1_ptrs[i], 16);
    }
    
    for (int i = 0; i < 10; i++) {
        HashBucket::freeMemory(new_pool3_ptrs[i], 32);
    }

    qDebug() << "再次释放后：";
    PoolVisualizer::debugAllPoolsStatus();

    qDebug() << "\n=== 第五阶段：释放所有内存 ===";
    
    // 释放池0剩余的内存
    for (int i = 100; i < 300; i++) {
        HashBucket::freeMemory(pool0_ptrs[i], 8);
    }
    for (int i = 30; i < 80; i++) {
        HashBucket::freeMemory(new_pool0_ptrs[i], 8);
    }
    
    // 释放池1剩余的内存
    for (int i = 50; i < 150; i++) {
        HashBucket::freeMemory(pool1_ptrs[i], 16);
    }
    for (int i = 15; i < 40; i++) {
        HashBucket::freeMemory(new_pool1_ptrs[i], 16);
    }
    
    // 释放池3剩余的内存
    for (int i = 30; i < 100; i++) {
        HashBucket::freeMemory(pool3_ptrs[i], 32);
    }
    for (int i = 10; i < 25; i++) {
        HashBucket::freeMemory(new_pool3_ptrs[i], 32);
    }

    qDebug() << "全部释放后：";
    PoolVisualizer::debugAllPoolsStatus();

    return 0;
}*/
